IoT CONFERENCE Blog

Leseprobe: Das ESP8266-Projektbuch – Heimautomation mit dem WLAN-Chip

Dec 7, 2016

Mit integrierter WLAN-Schnittstelle und zugleich günstig in der Anschaffung bietet der Mikrocontroller ESP8266 eine Vielzahl von Anwendungsmöglichkeiten für das Internet der Dinge und die Heimautomation. Dieses Buch liefert einen praxisnahen Einstieg in die vielfältige Welt des ESP8266 und seine Entwicklungsumgebung, die auf der leicht bedienbaren Arduino IDE basiert.

1.1 Hinweise

An dieser Stelle einige Hinweise, die ich vorab ansprechen möchte. Das Wichtigste sind die Grundbedürfnisse unseres Körpers, denn schließlich ist unser Überleben im Bastelkeller zu sichern.

1. Es ist immer dafür zu sorgen, dass genügend koffeinhaltige Getränke vorhanden sind.
2. Die Notrufnummer des Pizzaboten muss gut sichtbar neben dem Telefon hängen.

So, nun Spaß bei Seite: Der wichtigste Punkt ist die Sicherheit, um Ihr Heim, Ihre Gesundheit und die Ihrer Lieben zu schützen. Da in der heutigen Zeit die Elektrizität allgegenwärtig ist, sollte man zumindest die wichtigsten Grundregeln im Umgang mit ihr kennen und beherzigen. Finger weg von der Netzspannung! Es soll Leute geben, die nur ein leichtes Kribbeln spüren, wenn sie an die Netzspannung greifen. Das ist aber eher die Ausnahme. Üblicherweise liegt es daran, dass diese Personen eine sehr dicke Hornhaut an den Fingern haben. Wenn Sie nicht zu dieser reptilienähnlichen Gattung Mensch gehören, sollten Sie es sich immer gut überlegen, bevor Sie etwas anfassen.

Um die Sicherheit bei der Durchführung der Projekte zu gewährleisten, sind alle so aufgebaut, dass man sie mit Netzteilen betreiben kann. Bei der Wahl des Netzteils ist natürlich darauf zu achten, dass keine Teile zugänglich sind, die Netzspannung führen. Solange Sie wie hier beschrieben arbeiten, kann nichts schief gehen.

Die zweite große Gefahrenquelle ist der Lötkolben. Seine Spitze wird verdammt heiß. Genauer gesagt: Bis zu 450° C. Daher rate ich Ihnen, darauf zu achten, sie nicht zu berühren. Passiert es einem dennoch, wird man diese Erfahrung kein zweites Mal machen wollen. Alle Arbeiten rund ums Löten sollten auf einer nicht brennbaren Arbeitsfläche (z. B. Glas) erfolgen. Was schon weniger Menschen wissen: Lötzinn ist ziemlich schädlich für den menschlichen Körper. Es beinhaltet normalerweise recht viel Blei, ein Schwermetall, das Vergiftungen hervorruft. Das ist leider noch nicht alles. Sehen wir uns das Flussmittel innerhalb des Lötzinns an. Es ist beim Verschlucken hochgiftig.

Nun fragt man sich: Wer würde freiwillig Flussmittel schlucken? Das Flussmittel hat die unangenehme Eigenschaft zu spritzen. Nach einer Lötsession können Sie davon ausgehen, Blei und Flussmittelreste an den Fingern zu haben. Von dort kommen die Schadstoffe dann leicht auf das kalte Stück Pizza von gestern. Den Rest können Sie sich sicher selbst ausmalen. Ich vertrete die Meinung, dass Lebensmittel generell nichts in der Nähe des Lötkolbens verloren haben. Sie sollten immer ein Stückchen vom Ort des Geschehens entfernt stehen, wenn Sie Ihr Essen unbedenklich genießen wollen. Es ist vermutlich auch höchst unangenehm, ein abgeknipstes Transistorbeinchen quer im Hals stecken zu haben.

So, das soll es jetzt aber gewesen sein, mit dem erhobenen Zeigefinger. Wir wollen ja interessante Projekte verwirklichen und keine Arbeitssicherheitsschulung machen. Das Internet ist eine sich schnell verändernde Angelegenheit. Dieses sollten Sie immer im Hinterkopf haben, wenn Sie einem der in diesem Buch abgedruckten Links folgen. Die Links haben bei Drucklegung alle einwandfrei funktioniert. Es ist nun einmal ein bekanntes Problem, dass sie sich ohne Vorwarnung ändern können. Sollten Sie auf einen toten Link in diesen Buch stoßen, ergoogeln Sie sich bitte die Quelle neu.

1.2 Steckbrief des ESP8266

Der ESP8266 ist ein Mikrocontroller, der seinen Konkurrenten gegenüber einen entscheidenden Vorteil hat: Bei ihm ist eine WLAN-Schnittstelle schon ab Werk mit verbaut. Das bekommt man so bei keinem anderen Mikrocontroller in dieser Preisklasse geboten. Der Fairness halber muss man zugeben, dass der ESP8266 nicht wirklich viele GPIOs (general purpose input/output) hat, und auch der eine analoge Eingang ist eher dünn. Dafür hat er allerdings I²C- und SPI-Schnittstellen an Bord, um seinen Funktionsumfang, falls nötig, zu erweitern. Der Hersteller hat sich natürlich etwas dabei gedacht, als er diesen Mikrocontroller so entworfen hat.

Primär ist er dazu konzipiert, beliebige elektronische Komponenten an das WLAN anzubinden. Durch seinen Aufbau und auch seine geringe Größe ist er für viele verschiedene Anwendungsfälle geeignet. Das Internet of Things ist derzeit in aller Munde, hier kann der ESP8266 sowohl als Client wie auch als Server alle Trümpfe ausspielen.

Zusätzlich hat er ausgeklügelte Energiesparfunktionen, die sogar einen Batteriebetrieb ermöglichen. Seine vorhandenen GPIOs reichen für die meisten Anwendungen, die man sich im Bereich IoT und auch Hausautomation vorstellen kann, vollkommen aus.

Nicht zu vergessen ist seine beachtliche CPU-Leistung, mit der er auch komplexere Probleme lösen kann. Und natürlich ist sein bastlerfreundlicher Preis von unter 4 Euro ein dicker Pluspunkt.

1.3 Testgelände

Um die Projekte in diesem Buch realisieren zu können, benötigen wir eine Entwicklungsumgebung (IDE = Integrated Development Environment). Was liegt näher, als sich für eine IDE zu entscheiden, die schon auf die Bedürfnisse des Mikrocontrollerprogrammierers zugeschnitten ist?

Die Arduino IDE bietet uns genau das, was wir brauchen. Sie ist zur Entwicklung von Programmen für Mikrocontroller konzipiert worden, leicht zu bedienen und hat ein spezielles Plug-in für den ESP8266 an Bord. Man kann die Software kostenfrei für alle üblichen Betriebssysteme von der Homepage des Arduino-Projekts herunterladen.

Natürlich ist auch für das allseits beliebte und betriebssichere Linux eine 32/64-BitVersion vorhanden.

1.4 Hardware

Damit wir überprüfen können, ob das Installieren und Einrichten der Software fehlerfrei verlaufen ist, bauen wir uns eine Testhardware zusammen. Es ist zwar nicht besonders anspruchsvoll, eine LED blinken zu lassen, aber es reicht, um die grundlegende Kommunikation zwischen PC und ESP8266 zu testen.

Das Testprogramm zeigt uns auch gleich, wie man über die USB-Schnittstelle Debuginformationen vom ESP8266 an die Arduino IDE senden kann. Für den Testaufbau benötigen wir die in Tabelle 1.1 aufgeführten Bauteile.


Tabelle 1.1: Bauteilliste für die Testhardware

Auf dem Schaltplan (Abbildung 1.2) ist zu sehen, wie alle Komponenten miteinander verbunden werden müssen. Damit Sie eine Vorstellung bekommen, wie ein solcher Aufbau aussehen kann, werfen Sie bitte einen Blick auf Abbildung 1.1. Es ist kein großer Aufwand, mit einer Steckplatine eine Testhardware für den ESP8266 aufbauen.


Abbildung 1.1: Die Testumgebung auf einer Steckplatine


Abbildung 1.2: Der Schaltplan zur Testumgebung

Der ESP8266 hat leider ein etwas kleineres Rastermaß als die Steckplatine. Es gibt zwei Möglichkeiten, dieses Problem zu lösen. Die erste ist, dass wir uns einfach im Internet einen schicken Adapter für unseren Mikrocontroller bestellen (Abbildung 1.3). Bei diesen Adaptern muss man allerdings etwas aufpassen, da sie schon mit einigen Widerständen bestückt sind. Man sollte auf jeden Fall überprüfen, ob die schon vorhandene Bestückung für das eigene Projekt sinnvoll ist.


Abbildung 1.3: Adapter, um den ESP8266 in die Steckplatine stecken zu können

Die zweite, etwas kostengünstigere Lösung ist, sich aus Leitungsresten selbst einen Adapter zu basteln. Das ist gar nicht so schwer, wie es sich zuerst anhört.

Schritt 1:
Einige Zentimeter Leitung unter leichtem Zug glätten.

Schritt 2:
Den Kupferkern von der Isolierung trennen.

Schritt 3:
Ca. 3 cm lange Kupferstücke schneiden, die Isolierung in ca. 1 cm lange Stücke schneiden.

Schritt 4:
Die Kupferstücke möglichst gerade an den ESP8266 löten. Es hilft, das andere Ende in eine alte Steckplatine (Achtung, es kann beim Löten Schaden nehmen, wenn es zu heiß wird!) zu stecken.

Schritt 5:
Die Isolierung wieder über das Kupfer schieben.

Und fertig ist unser selbst gebauter Adapter. Wenn man etwas Übung im Löten hat, braucht es nur wenig Zeit und kostet nichts. Der Adapter kostet allerdings auch nur 3,50 €.

Egal, für welche von den zwei Lösungen Sie sich entscheiden, der ESP8266 kann jetzt auf die Steckplatine montiert werden. Oder um es in UNIX auszudrücken: mount -t Hardware /dev/ESP8266 / ProtoBoard. Unser Testaufbau wird über ein altes USB-Kabel mit Spannung versorgt.

In Abbildung 1.4 ist zu sehen, wie ein USB-Anschluss beschaltet ist. Normalerweise ist die rote Leitung Plus und die schwarze Minus. Im Zweifel kann ich nur raten, die Leitung vor dem ersten Versuch auszumessen. Ein USB-Anschluss kann bei einer Spannung von 5 Volt eine Stromstärke von bis zu 500 mA (Milliampere) liefern. Das ist leider etwas zu viel Spannung, um den ESP8266 direkt daran anzuschließen. Der ESP8266 benötigt eine Betriebsspannung im Bereich von 3 bis 3,6 Volt. Wird er an eine höhere Spannung angeschlossen, geht er kommentarlos kaputt.

Wir müssen also ein Bauteil dazwischen schalten, das die Spannung auf einen für den ESP8266 brauchbaren Wert absenkt. Diese Bauteile gibt es natürlich schon von der Stange und sie nennen sich Festspannungsregler. Es gibt für jeden Anwendungsfall den passenden Spannungsregler. In Kapitel 4.4 finden Sie die Beschreibung zu einigen Varianten.

Wir verwenden hier einen Spannungsregler, der weder besonders teuer noch unwirtschaftlich ist, den MCP1700. Er liefert am Ausgang stabile 3,3 Volt und hat einen extrem niedrigen Eigenenergiebedarf. Im Leerlauf verbraucht er nur einige µA (Microampere) Strom. Unter Last kann er bis zu 250 mA Strom liefern, dann wird er natürlich entsprechend warm. Die zwei Kondensatoren, die Sie im Schaltplan am Ein- und Ausgang des MCP1700 sehen, verhindern, dass die Regelschaltung im Inneren des Bausteins zu schwingen anfängt.

Wenden wir uns nun den vier 10-kΩ-(Kiloohm)-Widerständen und dem DIP-Schalter zu. Mit ihnen kann man festlegen, in welchem Modus der ESP8266 nach einem Reset startet. Es gibt zwei Modi, den Flash Mode und den Run Mode. Im Flash Mode können neue Programme in den ESP8266 geladen werden. Im Run Mode wird das aktuell geladene Programm ausgeführt. Befindet sich der ESP8266 im Flash Mode und ein neues Programm wird in ihn hochgeladen, wird dieses direkt ausgeführt.

Tabelle 1.2 fasst noch einmal die Bedeutung der Widerstände R1 bis R4 zusammen. Es gibt im Internet einige Anleitungen, bei denen die GPIOs, die den Bootmodus festlegen, ohne Vorwiderstand auf 3,3 oder 0 Volt gezogen werden. Davon rate ich ab. Es kann zu Beschädigungen der GPIOs führen. Verwenden Sie immer Pull-up- und Pull-down-Widerstände.

Nun haben wir fast alle Komponenten unseres Testaufbaus unter die Lupe genommen. Übrig ist der Resettaster, der dazu dient, den ESP8266 zu resetten. Hier sollten Sie nicht sparen, weil Sie ihn gerade bei den ersten Gehversuchen ziemlich oft verwenden werden. Die LED ist über einen Vorwiderstand an den ESP8266 angeschlossen. Der Widerstand ist so dimensioniert, dass er für alle üblichen LEDs passt.

Die Hardware, die wir für unseren ersten Versuch brauchen, ist nun komplett. Wenden wir uns jetzt der Installation der Software zu.


Tabelle 1.2: Funktion der Widerstände für den ESP8266

Abbildung 1.4: Pinbelegung eines USB-Anschlusses

1.5 Installation der Arduino IDE

In diesem Buch verwenden wir die Arduino-Software als Entwicklungsumgebung. Sie kann unter https://www.arduino.cc/en/Main/Software von der Homepage des Arduino-Projekts heruntergeladen werden (Abbildung 1.5). Laden Sie die für Ihr Betriebssystem passende Version herunter und speichern Sie diese auf Ihrer Festplatte. Vermutlich werden Sie eine neuere Version der Software als die in dieser Anleitung verwendete herunterladen können. Bitte passen Sie die Versionsnummer dann einfach an.

Die nötigen Installationsschritte werden sich dadurch nicht verändern. Schnelle Versionswechsel sind als positiv zu bewerten, denn sie bedeuten, dass die Software gut supportet wird. Die Entwickler des Arduino-Projekts sind sehr aktiv und liefern öfter eine neue Version ihrer Software, um Fehler zu korrigieren oder neue Features einzubauen.


Abbildung 1.5: Die Downloadseite des Arduino-Projekts

Die nächste Seite bittet daher direkt um eine kleine Zuwendung für das Projekt. Man hat aber die Möglichkeit, den schwerer sichtbaren „JUST DOWNLOAD“-Link zu klicken und bekommt die Software gratis. Um die Windows-Version zu installieren, klicken Sie auf den Download für den Windows Installer und erlauben, dass die .exe ausgeführt wird. Das Fenster mit der Nachfrage, ob Änderungen durchgeführt werden dürfen, bestätigen Sie bitte auch. Nun klicken wir uns bis zum Ende durch den Installationsdialog. Die Einstellungen können übernommen werden, so wie sie sind.

Den USB-Treiber müssen Sie mit installieren, damit Sie später mit dem ESP8266 kommunizieren können. Mit einem Doppelklick auf das Desktopicon können Sie jetzt die IDE starten. Beim ersten Start fragt die Windows-Firewall nach, ob wir das wirklich wollen – natürlich wollen wir. Die Installation unter Linux läuft etwas anders ab. Nachdem wir die Software heruntergeladen haben, speichern wir sie in unserem persönlichen Verzeichnis. Mit der Tastenkombination ALT + STRG + T öffnen wir uns ein Terminalfenster.

Mit der folgenden Zeile entpacken wir das Archiv:

Sollte tar das mit einem Fehler quittieren, fehlen auf Ihrem System vermutlich die xz-Utilities. Unter Debian-ähnlichen Linux-Distributionen kann man diese einfach mit sudo apt-get install xz-utils installieren.

Um die Arduino IDE jetzt zu verwenden, wechseln Sie bitte in das Verzeichnis ./arduino-1.6.8 und starten dort die Arduino-Software.

Nachdem wir die Arduino-Software sowohl unter Windows wie auch unter Linux installiert haben, können wir sie nun einrichten. Hierbei gibt es keine betriebssystemspezifischen Unterschiede. Die Arduino-Software ist in erster Linie für die Entwicklung von Programmen für die Arduino Boards gedacht. Die Entwickler der Software haben sie allerdings so offen gestaltet, dass man mit wenigen Handgriffen auch andere Mikrocontroller damit programmieren kann. Der erste Schritt ist, der IDE zu sagen, dass sie einen zusätzlichen Boardverwalter aufnehmen soll. Dies können wir unter dem Menüpunkt Datei | Voreinstellungen | Zusätzliche Boardverwalter-URLs erledigen. Dort tragen wir folgenden URL als Boardverwalter ein (Abbildung 1.6):

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Abbildung 1.6: Einen zusätzlichen Boardverwalter in die Arduino IDE eintragen


Abbildung 1.7: Boardverwalter für den ESP8266 installieren

Als nächsten Schritt starten wir die Installation des zusätzlichen Boardmanagers für den ESP8266. Das geschieht unter dem Menüpunkt Werkzeuge | Board | Boardverwalter…. Dort kann man am Ende der Liste den ESP8266-Boardverwalter auswählen und installieren (Abbildung 1.7).

Abbildung 1.8: Auswählen des Boards

Nachdem die Installation des Boardmanagers abgeschlossen ist, kann man das Generic ESP-Modul, unter dem Menüpunkt Werkzeuge | Board in der Liste der Zielplattformen auswählen (Abbildung 1.8). Die Arduino-Software kann jetzt Programme für den ESP8266 erstellen. Unter Linux ist jetzt noch eine kleine Anpassung der Berechtigungen für Ihren User zu machen. Das ist nötig, damit er auf die serielle Schnittstelle zugreifen kann.

1.6 Upload und Start

Wir stehen kurz von dem Ziel. Die Hardware ist zusammengesteckt. Die Arduino IDE ist für den ESP8266 eingerichtet. Jetzt müssen wir nur noch das USB-Kabel zwischen unseren PC und dem Testaufbau einstecken und es kann losgehen. … Ach ja, wir haben ja noch gar kein Programm, das wir in den ESP8266 hochladen könnten. Das erste Testprogramm sieht gar nicht so spektakulär aus (Listing 1.1). Die setup();-Funktion wird, wie der Name schon vermuten lässt, beim Start des ESP8266 ausgeführt. Hier können alle für das Programm nötigen Initialisierungsschritte durchgeführt werden. In unseren Fall wird der GPIO-Anschluss 13 als Ausgang definiert.


Listing 1.1: Blink_LED-Programm

Nachdem die setup();-Funktion beendet ist, wird die loop();-Funktion aufgerufen. Auch hier ist der Name von den Entwicklern der IDE sprechend gewählt worden. Sobald die loop();-Funktion beendet ist, wird sie sofort wieder aufgerufen. In der loop();-Funktion platzieren wir unser Programm. Es schaltet den Ausgang GPIO13 auf LOW (0), damit wird unsere LED ausgeschaltet. Danach wird eine Sekunde gewartet, der Ausgang wird wieder auf HIGH (1) geschaltet – die LED leuchtet. Es wird wieder gewartet und die loop();-Funktion wird verlassen. Wie gesagt, sie wird nach dem Verlassen sofort wieder aufgerufen. So entsteht für uns der Eindruck einer Endlosschleife.

Unser ESP8266 lässt jetzt die LED blinken. Das einzige, was ihn jetzt noch von der Ausführung seines Programms abhalten würde, ist ein Verlust der Betriebsspannung. Natürlich können wir jederzeit ein neues Programm in ihn hinein laden.

Das Thema Hochladen sollten wir uns noch etwas genauer ansehen. Der ESP8266 muss, damit wir Software in ihn laden können, im Flash Mode sein. Das bedeutet, die DIP-Schalter 1 und 2 müssen geschlossen sein, sprich auf ON stehen. Es ist wichtig, dass nach einem Wechsel des Betriebsmodus der Resettaster betätigt wird, damit der ESP8266 auch im eingestellten Mode gestartet wird. Jetzt können wir in der Arduino IDE auf den Button für das Hochladen klicken. Das ist das runde Icon mit dem Pfeil nach rechts (Abbildung 1.9).

Wenn der Hochladen-Button betätigt wird, baut die IDE ein Image mit dem Programm und lädt es direkt in den ESP8266 hoch. Ist es komplett hochgeladen, wird es direkt ausgeführt. An dieser Stelle müssen wir etwas aufpassen. Der ESP8266 führt das Programm zwar aus, hat aber aktuell noch die Beschaltung für den Flash Mode. Nach einem Reset würde er seinen Bootloader starten und darauf warten, dass wir ein neues Programm hochladen. Um wirklich auf der sicheren Seite zu sein, sollten Sie die DIP-Schalter 1 und 2 öffnen und den ESP8266 resetten. Damit befindet sich der ESP8266 auf jeden Fall im Run Mode.

Nach einem weiteren Reset würde er das Programm wieder von vorne starten. Achtung, jetzt kann natürlich nichts hochgeladen werden. Etwaige Versuche werden mit einem Kommunikationsfehler quittiert. Um wieder ein neues Programm hochladen zu können, müssen die DIP-Schalter erst wieder geschlossen und der Resettaster gedrückt werden. Sollte bei Ihnen ein Kommunikationsfehler auftreten, der sich nicht auf den falschen Betriebsmodus des ESP8266 zurückführen lässt, schauen Sie sich bitte die Einstellung unter Werkzeuge | Port etwas genauer an. Es könnte einfach sein, dass der falsche Port dort eingestellt ist. Leider kann man hier keine genaue Aussage machen, welcher nun der richtige ist. Das ist so eine Frage, die sich mit „Es kommt darauf an“ beantworten lässt. Je nachdem, was schon alles an Ihren USB-Bus angeschlossen ist, kann der USB-nach-Seriell-Adapter eine andere Kennung bekommen. Das einfachste ist Ausprobieren. Trennen Sie die Verbindung zum USB-nach-Seriell-Adapter. Schauen Sie unter Werkzeuge | Ports, welche Anschlüsse vorhanden sind. Verbinden Sie den USB-nach-Seriell-Adapter wieder. Schauen Sie erneut in Werkzeuge | Ports: Der Anschluss, der hinzugekommen ist, ist derjenige, den Sie verwenden müssen.


Abbildung 1.9: Hochladen-Button und serieller Monitor

Damit hätten Sie schon alle Grundlagen, um eigene Programme für den ESP8266 zu schreiben. Ich möchte Ihnen noch eine Sache mit auf den Weg geben, die Ihnen beim Experimentieren das Leben enorm erleichtern wird.

Der USB-nach-Seriell-Adapter, der zum Hochladen der Images verwendet wird, kann auch dazu benutzt werden, um Informationen aus den ESP8266 heraus zur Arduino IDE zu senden. In der IDE sehen Sie ganz rechts einen eckigen Button mit einer kleinen Lupe (Abbildung 1.9). Wenn Sie diesen betätigen, wird der serielle Monitor aktiviert.

Jetzt müssen wir unser Programm (Listing 1.2) nur entsprechend anpassen und wir können sehen, was in unserem ESP8266 vor sich geht. In der setup();-Funktion initialisieren wir die serielle Schnittstelle mit einer Geschwindigkeit von 115 200 Bits in der Sekunde. Hier müssen wir darauf achten, dass die Geschwindigkeit in der Arduino IDE auch auf diesen Wert gestellt ist, was wir unter Werkzeuge | UploadSpeed machen können. In der loop();-Funktion werden die Befehle zur Ausgabe auf die Schnittstelle geschrieben. Es ist natürlich auch möglich, über die serielle Schnittstelle Daten in den ESP8266 einzugeben. Das sehen wir uns aber erst später an.


Listing 1.2

Jetzt sind Sie gerüstet, um sich den Projekten in Kapitel 2 zu stellen. Ich kann Ihnen dabei nur viel Spaß wünschen.